home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-12-05 | 7.0 KB | 333 lines | [TEXT/PJMM] |
- { This program requires TransSkel.p, Runtime.lib and Interface.lib in the same }
- { project. Also requires you to set the resource file to Dialog.proj.rsrc in the run options }
- { Puts up 2 dialog boxes, whose items affect the other dialog }
- { ported to LS Pascal by Owen Hartnett, Ωhm Software Co. }
- { 7 January 1987 }
- {30 December 1987 - changes for version 2.00 }
- { Warning: Compile Time variable supportdialogs in TransSkel.p must be set to true! }
-
- {Ingemar dec 1994: Added filter parameter to SkelDialog (as nil).}
-
- program DialogSkel;
-
- uses
- {$IFC UNDEFINED THINK_PASCAL}
- Memtypes, Quickdraw, OSIntf, ToolIntf, PackIntf,
- {$ENDC}
- TransSkel;
-
-
- const
- mDlogRes = 1000;
- aboutAlrtRes = 1001; { About... alert resource number }
-
- showDlog1 = 1; { File Menu item numbers }
- showDlog2 = 2;
- quit = 4;
-
- undo = 1; { Edit menu item numbers }
- cut = 3;
- copy = 4;
- paste = 5;
- clear = 6;
-
- button1 = 1; { dialog item numbers }
- edit1 = 2;
- static1 = 3;
- radio1 = 4;
- radio2 = 5;
- radio3 = 6;
- check1 = 7;
- check2 = 8;
- user1 = 9;
-
- type
- EventPtr = ^EventRecord;
-
- var
- mDlog1, mDlog2: DialogPtr;
-
- iconNum1, iconNum2: integer;
-
- dummy: Boolean; { may be used for memory management }
-
- procedure DrawIcon (dlog: DialogPtr; item: integer);
- var
- h, itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
- begin
- GetDItem(dlog, item, itemType, itemHandle, itemRect);
- if dlog = mDlog1 then
- h := GetIcon(iconNum1)
- else
- h := GetICon(iconNum2);
- PlotIcon(itemRect, h);
- end;
-
- function GetDctl (dlog: DialogPtr; item: integer): Boolean;
-
- var
- itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
-
- begin
- GetDItem(dlog, item, itemType, itemHandle, itemRect);
- GetDCtl := Boolean(GetCtlValue(ControlHandle(itemhandle)));
- end;
-
- procedure SetDCtl (dlog: DialogPtr; item: integer; value: Boolean);
-
- var
- itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
- begin
- GetDItem(dlog, item, itemType, itemHandle, itemRect);
- SetCtlValue(ControlHandle(itemHandle), integer(value));
- end;
-
- procedure GetDtext (dlog: DialogPtr; item: integer; var str: Str255);
-
- var
- itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
-
- begin
- GetDItem(dlog, item, itemType, itemHandle, itemRect);
- GetIText(itemHandle, str);
- end;
-
- procedure SetDText (dlog: DialogPtr; item: integer; str: Str255);
- var
- itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
- begin
- GetDItem(dlog, item, itemType, itemHandle, itemRect);
- SetIText(itemHandle, str);
- end;
-
- procedure SetDProc (dlog: DialogPtr; item: integer; p: ProcPtr);
- var
- itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
- begin
- GetDItem(dlog, item, itemType, itemHandle, itemRect);
- SetDITem(dlog, item, itemType, Handle(p), itemRect);
- end;
-
- procedure SetDRadio (dlog: DialogPtr; item: integer);
-
- var
- partner: DialogPtr;
- itemHandle: Handle;
- itemType: integer;
- itemRect: Rect;
- begin
- partner := DialogPtr(GetWRefCon(dlog));
- SetDCtl(dlog, radio1, item = radio1);
- SetDCtl(dlog, radio2, item = radio2);
- SetDCtl(dlog, radio3, item = radio3);
- if partner = mDlog1 then
- iconNum1 := item - radio1
- else
- iconNum2 := item - radio1;
-
- GetDItem(partner, user1, itemType, itemHandle, itemRect);
- SetPort(partner);
- InvalRect(itemRect);
- end;
-
- procedure Event (item: integer; event: EventPtr);
-
- var
- actor, partner: DialogPtr;
- title: Str255;
- value: Boolean;
- mypeek: WindowPeek;
- mychar: Boolean;
-
- begin
- GetPort(actor);
- partner := DialogPtr(GetWRefCon(actor));
- case item of
- button1:
- begin
- GetDText(actor, edit1, title);
- SetWTitle(partner, title);
- end;
- radio1:
- SetDRadio(actor, radio1);
- radio2:
- SetDRadio(actor, radio2);
- radio3:
- SetDRadio(actor, radio3);
- check1:
- begin
- value := not (GetDCtl(actor, item));
- SetDCtl(actor, item, value);
- if value = false then
- HideWindow(partner)
- else
- ShowWindow(partner);
- end;
- check2:
- begin
- value := not (GetDCtl(actor, check2));
- SetDCtl(actor, check2, value);
- mypeek := WindowPeek(partner);
- if value then
- mychar := true
- else
- mychar := false;
-
- mypeek^.goAwayFlag := mychar;
- end;
- otherwise
- end;
- end;
-
- procedure Close;
-
- var
- actor, partner: DialogPtr;
-
- begin
- GetPort(actor);
- partner := DialogPtr(GetWRefCon(actor));
- HideWindow(actor);
- SetDCtl(partner, check1, false);
- end;
-
- procedure Clobber;
-
- var
- theDialog: DialogPtr;
-
- begin
- GetPort(theDialog);
- DisposDialog(theDialog);
- end;
-
- { File menu handler}
-
- procedure DoFileMenu (item: integer);
-
- begin
- case item of
- showDlog1:
- begin
- SelectWindow(mDlog1);
- ShowWindow(mDlog1);
- SetDCtl(mDlog2, check1, true);
- end;
- showDlog2:
- begin
- SelectWindow(mDlog2);
- ShowWindow(mDlog2);
- SetDCtl(mDlog1, check1, true);
- end;
- quit:
- SkelWhoa;
- end;
- end;
-
- { Handle Edit menu items for text window}
-
- procedure DoEditMenu (item: integer);
-
- var
- theDialog: DialogPtr;
- mypeek: WindowPeek;
- ignore: integer;
-
- begin
- theDialog := DialogPtr(FrontWindow);
- mypeek := WindowPeek(theDialog);
- if mypeek^.windowKind = dialogKind then
- case item of
- cut:
- begin
- DlgCut(theDialog);
- ignore := ZeroScrap;
- ignore := TEToScrap;
- end;
- copy:
- begin
- DlgCopy(theDialog);
- ignore := ZeroScrap;
- ignore := TEToScrap;
- end;
- paste:
- begin
- ignore := TEFromScrap;
- DlgPaste(theDialog);
- end;
- clear:
- DlgDelete(theDialog);
- end;
- end;
-
- { Handle selection of About… item from Apple menu}
-
- procedure DoAbout;
-
- var
- ignore: integer;
- begin
- ignore := Alert(aboutAlrtRes, nil);
- end;
-
- function DemoDialog (title: Str255; x, y: integer): DialogPtr;
-
- var
- theDialog: DialogPtr;
-
- begin
- theDialog := GetNewDialog(mDlogRes, nil, WindowPtr(-1));
- MoveWindow(theDialog, x, y, false);
- SetWTitle(theDialog, title);
- dummy := SkelDialog(theDialog, @Event, @Close, @Clobber, nil);
- DemoDialog := theDialog;
- end;
-
- var
- m: MenuHandle;
-
- begin
- iconNum1 := 0;
- iconNum2 := 0;
- SkelInit(6, nil);
- SkelApple('About DialogSkel…', @DoAbout);
- m := NewMenu(1000, 'File');
- AppendMenu(m, 'Show Dialog 1;Show Dialog 2;(-;Quit/Q');
- dummy := SkelMenu(m, @DoFileMenu, nil, false);
-
- m := NewMenu(1001, 'Edit');
- AppendMenu(m, '(Undo/Z;(-;Cut/X;Copy/C;Paste/V;Clear');
- dummy := SkelMenu(m, @DoEditMenu, nil, true);
-
- mDlog1 := DemoDialog('Modeless Dialog 1', 50, 50);
- mDlog2 := DemoDialog('Modeless Dialog 2', 150, 200);
- SetWRefCon(WindowPtr(mDlog1), longint(mDlog2));
- SetWRefCon(WindowPtr(mDlog2), longint(mDlog1));
- SetDText(mDlog1, edit1, 'Modeless Dialog 2');
- SetDText(mDlog2, edit1, 'Modeless Dialog 1');
- SetDProc(mDlog1, user1, @DrawIcon);
- SetDProc(mDlog2, user1, @DrawIcon);
- SetDCtl(mDlog1, radio1, true);
- SetDCtl(mDlog2, radio1, true);
- SetDCtl(mDlog1, check1, true);
- SetDCtl(mDlog2, check1, true);
- SetDCtl(mDlog1, check2, true);
- SetDCtl(mDlog2, check2, true);
- ShowWindow(mDlog1);
- ShowWindow(mDlog2);
-
- SkelMain;
- SkelClobber;
- end.